Python pandas读写excel文件
read_excel()
read_excel(io,
sheetname=0,
header=0,
skiprows=None,
skip_footer=0,
index_col=None,
names=None,
parse_cols=None,
parse_dates=False,
date_parser=None,
na_values=None,
thousands=None,
convert_float=True,
has_index_names=None,
converters=None,
dtype=None,
true_values=None,
false_values=None,
engine=None,
squeeze=False,
**kwds
)
常用参数解析:
io
: string, path object ; excel 路径。sheetname
: string, int, mixed list of strings/ints, or None, default 0 返回多表使用sheetname=[0,1],若sheetname=None是返回全表 注意:int/string 返回的是dataframe,而none和list返回的是dict of dataframeheader
: int, list of ints, default 0 指定列名行,默认0,即取第一行,数据为列名行以下的数据 若数据不含列名,则设定 header = Noneskiprows
: list-like,Rows to skip at the beginning,省略指定行数的数据skip_footer
: int,default 0, 省略从尾部数的int行数据index_col
: int, list of ints, default None指定列为索引列,也可以使用u”strings”,读取的时候指定 索引names
: array-like, default None, 指定列的名字。na_values
:指定原数据集中哪些特征的值作为缺失值。na_filter
: boolean, default True;是否检查丢失值(空字符串或者是空值)。对于大文件来说数据集中没有空值,设定na_filter=False可以提升读取速度。thousands
:指定原始数据中的千位符comment
:指定注释符,在读取数据时,如果碰到首行指定的注释符,则跳过该行。parse_datas
:指明日期列,为字符串构成的 list; 数据源:
数据源:
sheet1:
ID NUM-1 NUM-2 NUM-3
36901 142 168 661
36902 78 521 602
36903 144 600 521
36904 95 457 468
36905 69 596 695
sheet2:
ID NUM-1 NUM-2 NUM-3
36906 190 527 691
36907 101 403 470
basestation ="F://pythonBook_PyPDAM/data/test.xls"
data = pd.read_excel(basestation)
print data
输出:是一个dataframe
ID NUM-1 NUM-2 NUM-3
0 36901 142 168 661
1 36902 78 521 602
2 36903 144 600 521
3 36904 95 457 468
4 36905 69 596 695
sheet_name参数
:返回多表使用sheetname=[0,1],若sheetname=None是返回全表 注意:int/string 返回的是dataframe,而none和list返回的是dict of dataframe
data_1 = pd.read_excel(basestation,sheet_name=[0,1])
print(data_1)
print(type(data_1))
'''
OrderedDict([(0, ID NUN-1 NUM-2 NUM-3
0 36901 45 78 95
1 36902 47 45 63
2 39603 85 47 21
3 39604 96 36 45
4 39605 25 89 15),
(1, ID NUN-1 NUM-2 NUM-3
0 36906 58 52 47
1 36907 66 26 14)])
<class 'collections.OrderedDict'>
header参数
指定列名行,默认0,即取第一行,数据为列名行以下的数据 若数据不含列名,则设定 header = None ,注意这里还有列名的一行。
data = pd.read_excel(basestation,header=None)
print(data)
'''
0 1 2 3
0 ID NUN-1 NUM-2 NUM-3
1 36901 45 78 95
2 36902 47 45 63
3 39603 85 47 21
4 39604 96 36 45
5 39605 25 89 15
'''
data = pd.read_excel(basestation,header=[3])
print(data)
'''
39603 85 47 21
0 39604 96 36 45
1 39605 25 89 15
'''
skiprows参数
省略指定行数的数据
data = pd.read_excel(basestation,skiprows = [1])
print(data)
'''
ID NUN-1 NUM-2 NUM-3
0 36902 47 45 63
1 39603 85 47 21
2 39604 96 36 45
3 39605 25 89 15
'''
skip_footer参数
省略从尾部数的int行的数据
data = pd.read_excel(basestation, skip_footer=3)
print(data)
'''
ID NUN-1 NUM-2 NUM-3
0 36901 45 78 95
1 36902 47 45 63
'''
index_col参数
指定列为索引列,也可以使用u”strings”
data = pd.read_excel(basestation, index_col="NUM-3")
print(data)
'''
ID NUN-1 NUM-2
NUM-3
95 36901 45 78
63 36902 47 45
21 39603 85 47
45 39604 96 36
15 39605 25 89
'''
names参数
指定列的名字。
data = pd.read_excel(basestation,names=["a","b","c","e"])
print(data)
'''
a b c e
0 36901 45 78 95
1 36902 47 45 63
2 39603 85 47 21
3 39604 96 36 45
4 39605 25 89 15
'''
nrows参数
读取指定的几行数据
data = pd.read_excel(basestation, nrows=3)
print(data)
'''
ID NUN-1 NUM-2 NUM-3
0 36901 45 78 95
1 36902 47 45 63
2 39603 85 47 21
'''
usecols 参数
读取指定的列, 也可以通过名字或索引值(指定需要读取原数据集中的哪些变量名,以列表传入。)
data = pd.read_excel(basestation, usecols=2)
print(data)
'''
ID NUN-1 NUM-2
0 36901 45 78
1 36902 47 45
2 39603 85 47
3 39604 96 36
4 39605 25 89
'''
to_excel()
存储函数为pd.DataFrame.to_excel()
,注意,必须是DataFrame写入excel, 即Write DataFrame to an excel sheet。其具体参数如下:
to_excel(self,
excel_writer,
sheet_name='Sheet1',
na_rep='',
float_format=None,
columns=None,
header=True,
index=True,
index_label=None,
startrow=0,
startcol=0,
engine=None,
merge_cells=True,
encoding=None,
inf_rep='inf',
verbose=True,
freeze_panes=None
)
数据源:
ID NUM-1 NUM-2 NUM-3
0 36901 142 168 661
1 36902 78 521 602
2 36903 144 600 521
3 36904 95 457 468
4 36905 69 596 695
5 36906 165 453
加载数据:
basestation ="./ex.xls"
basestation_end ="./test_end.xls"
data = pd.read_excel(basestation)
参数excel_writer
输出路径
data.to_excel(basestation_end)
sheet_name
将数据存储在excel的那个sheet页面
data.to_excel(basestation_end,sheet_name="sheet2")
na_rep
缺失值填充
data.to_excel(basestation_end,na_rep="NULL")
colums
sequence, optional,Columns to write 选择输出的的列。
data.to_excel(basestation_end,columns=["ID"])
header
boolean or list of string,默认为True,可以用list命名列的名字。header = False 则不输出题头。
data.to_excel(basestation_end,header=["a","b","c","d"])
header = False
则不输出题头
data.to_excel(basestation_end,header=False,columns=["ID"])
index
boolean, default True Write row names (index) 默认为True,显示index,当index=False 则不显示行索引(名字)。 index_label : string or sequence, default None 设置索引列的列名。
data.to_excel(basestation_end,index=False)
index_label
设置索引列的列名
data.to_excel(basestation_end,index_label=["f"])
案例
写入excel,自定义索引
data={'ID':[1,2,3,4],
'year':[2000,2001,2002,2003],
'pop':[3.7,3.6,2.4,0.9]}
df=pd.DataFrame(data)
print(df)
'''
ID year pop
0 1 2000 3.7
1 2 2001 3.6
2 3 2002 2.4
3 4 2003 0.9
'''
df.to_excel('text.xls')
data={'ID':[1,2,3,4],
'year':[2000,2001,2002,2003],
'pop':[3.7,3.6,2.4,0.9]}
df=pd.DataFrame(data)
df=df.set_index('ID')
df.to_excel('text.xls')
读取的数据无表头,为其添加新的表头并保存
people=pd.read_excel('People.xlsx',header=None)
people.columns=['id', 'type', 'title', 'First', 'Middle', 'Last']
print(people.columns)
#Index(['id', 'type', 'title', 'First', 'Middle', 'Last'], dtype='object')
#默认添加行索引 ,可以重新指定
people=people.set_index('id')
people.to_excel('people2.xls')
指定列为索引,避免自动pands再生成新的索引
#指定某列为索引 ,pands就不会再自动生成索引
people=pd.read_excel('people2.xls',index_col='id')
将多个Sheet写入到本地同一Excel文件中
import pandas as pd
#读取两个表格
data1=pd.read_excel('文件路径')
data2=pd.read_excel('文件路径')
#将两个表格输出到一个excel文件里面
writer=pd.ExcelWriter('D:新表.xlsx')
data1.to_excel(writer,sheet_name='sheet1')
data2.to_excel(writer,sheet_name='sheet2')
#必须运行writer.save(),不然不能输出到本地
writer.save()
with pd.ExcelWriter(r'C:\Users\数据\Desktop\data\test2.xls') as writer:
df1.to_excel(writer, sheet_name='df1')
df2.to_excel(writer, sheet_name='df2')
将多个 sheet 写入到一个文件的时候,切记 close 文件